C言語

ポインタと配列

  • ポインタ周りで苦戦中。でもたくさん書いていたらだんだんとなじんできた。
#include <stdio.h>

int main(void){
	char *str[] = {"aiueo"};
	char mystr[] = "ohyeah";
	char *mystr2 = "uho";
	printf("%s %c%c\n", str[0], str[0][0], str[0][1]);
	printf("%s %c%c\n", mystr, *(mystr + 0), *(mystr + 1));
	printf("%s %c%c\n", mystr2, *(mystr2 + 0), *(mystr2 + 1));
	return 0;
}

ポインタの配列

#include <stdio.h>

int main(void){
	char *str[2] = {
		"hoge",
		"aaaaaaaa"
	};
	int i;
	for(i=0; i<2; i++){
		printf("%s %s\n", *(str + i), str[i]);
	}
	return 0;
}

関数に配列を渡す

#include <stdio.h>

void charcount(char s[]);

int main(void){
	char str[] = "aiu eo";
	charcount(str);
	return 0;
}

void charcount(char str[]){
	int count = 0;
	int i;
	for(i=0; str[i] != NULL; i++){
		count++;
	}
	printf("%d\n", count);
	return ;
}

関数にポインタを渡す

#include <stdio.h>

void charcount(char *);

int main(void){
	char *str = "aiu eo";
	charcount(str);
	return 0;
}

void charcount(char *str){
	int count = 0;
	int i;
	for(i=0; *(str + i) != NULL; i++){
		count++;
	}
	printf("%d\n", count);
	return ;
}

ポインタとインクリメント

#include <stdio.h>

int main(void){
	char *str = "aiueo";
	printf("%c\n", *(str++));
	printf("%c\n", *(str++));
	printf("%c\n", *(str++));
	printf("%c\n", *(str++));
	printf("%c\n", *(str++));
	return 0;
}

ポインタのポインタ

  • その1
#include <stdio.h>

int main() {
	int a = 100;
	int *p, *(*q);
	p = &a;
	q = &p;
	printf("%p %p %p %d\n", &a, p, *q, *(*q));
	**q = 200;
	printf("%d\n", a);
	return 0;
}
  • その2(?)・・・ポインタにポインタを代入
#include <stdio.h>

int main() {
	int a = 100;
	int *p, *q;
	p = &a;
	q = p;  /* q = &a と同じこと */
	printf("%p %p %p\n", &a, p, q);
	*q = 200;
	printf("%d %d %d\n", a, *p, *q);
	return 0;
}