字符串与字符数组
字符串注意事项:  
#include <stdio.h>
void main() {
char c[7]={'t','o','m'};
char str[4] = {'a','b','c','\0'};
char str2[] = {'j','a','c','k'};
char str3[] = "Hello";
printf("\n c=%s", c);
printf("\n str=%s", str);
printf("\n str2=%s", str2);
printf("\n str3=%s", str3);
getchar();
}
字符串的遍历
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main() {
char greeting[] = "Hello";
int i;
int len = strlen(greeting);
printf("\n greeting=%s", greeting);
printf("\nlen=%d", len);
printf("\n字符串第3个字符是=%c", greeting[2]);
printf("\n");
for(i = 0; i < len; i++) {
printf("%c ", greeting[i]);
}
system("pause");
}
字符指针

 
str是一个常量, str=“hello tom"相当于开辟了一块空间,存放了"hello tom”,然后希望将str指向这一块空间,当然这是不可以的,因为str是一个常量。
指针入门

&ptr:指针所存放的地址 ptr:原数值所存放的地址 *ptr:ptr所指向空间里存放的值(原数值的地址)
#include <stdio.h>
void main() {
int num = 1;
int *ptr = #
printf("\nnum 的值=%d num 地址=%p", num, &num);
printf("\nptr 的地址是 %p ptr 存放的值是一个地址为 %p ptr 指向的值=%d", &ptr, ptr, *ptr);
getchar();
}
值传递和地址传递
 
#include <stdio.h>
int main() {
int num = 100;
int *p = #
int * p2 = p;
*p2 = 55;
printf("num=%d *p=%d *p2=%d ", num, *p, *p2);
getchar();
}
指针的自增和自减运算
自增运算 
#include <stdio.h>
const int MAX = 3;
int main () {
int var[] = {10, 100, 200};
int i, *ptr;
ptr = var;
for ( i = 0; i < MAX; i++) {
printf("var[%d] 地址= %p \n", i, ptr );
printf("存储值:var[%d] = %d\n", i, *ptr );
ptr++;
}
getchar();
return 0;
}
自减运算 
#include <stdio.h>
const int MAX = 3;
int main () {
int var[] = {10, 100, 200};
int i, *ptr;
ptr = &var[MAX-1];
for ( i = MAX; i > 0; i--) {
printf("ptr存放的地址=%p\n", ptr);
printf("存储值:var[%d] = %d\n", i-1, *ptr );
ptr--;
}
getchar();
return 0;
}
指针数组
 
#include <stdio.h>
const int MAX=3;
int main ()
{
int var[] = {10, 100, 200};
int i, *ptr[3];
for ( i = 0; i < MAX; i++)
{
ptr[i] = &var[i];
}
for ( i = 0; i < MAX; i++)
{
printf("Value of var[%d] = %d ptr[%d]本身的地址=%p \n", i, *ptr[i] , i, &ptr[i]);
}
getchar();
return 0;
}

多重指针


#include <stdio.h>
int main () {
int var;
int *ptr;
int **pptr;
int ***ppptr;
var = 3000;
ptr = &var;
pptr = &ptr;
ppptr = &pptr;
printf("var的地址=%p var = %d \n", &var, var );
printf("ptr 的本身的地址=%p ptr存放的地址=%p *ptr = %d \n", &ptr, ptr, *ptr );
printf("pptr 本身地址 = %p pptr存放的地址=%p **pptr = %d\n", &pptr, pptr, **pptr);
printf("ppptr 本身地址 = %p ppptr存放的地址=%p ***ppptr = %d\n", &ppptr, ppptr, ***ppptr);
getchar();
return 0;
}

传递值(或地址)给函数

#include <stdio.h>
void test2(int *p);
void main() {
int num=90;
int *p = #
test2(&num);
printf("\nmain() 中的num=%d", num);
test2(p);
printf("\nmain() 中的num=%d", num);
getchar();
}
void test2(int *p) {
*p += 1;
}
#include <stdio.h>
double getAverage(int *arr, int size);
double getAverage2(int *arr, int size);
int main ()
{
int balance[5] = {1000, 2, 3, 17, 50};
double avg;
avg = getAverage( balance, 5 ) ;
printf("Average value is: %f\n", avg );
getchar();
return 0;
}
double getAverage(int *arr, int size)
{
int i, sum = 0;
double avg;
for (i = 0; i < size; ++i)
{
sum += arr[i];
printf("\narr存放的地址=%p ", arr);
}
avg = (double)sum / size;
return avg;
}
double getAverage2(int *arr, int size)
{
int i, sum = 0;
double avg;
for (i = 0; i < size; ++i)
{
sum += *arr;
printf("\narr存放的地址=%p ", arr);
arr++;
}
avg = (double)sum / size;
return avg;
}
返回指针的函数
请编写一个函数 strlong(),返回两个字符串中较长的一个。
#include <stdio.h>
#include <string.h>
char *strlong(char *str1, char *str2){
printf("\nstr1的长度%d str2的长度%d", strlen(str1), strlen(str2));
if(strlen(str1) >= strlen(str2)){
return str1;
}else{
return str2;
}
}
int main(){
char str1[30], str2[30], *str;
printf("\n请输入第1个字符串");
gets(str1);
printf("\n请输入第2个字符串");
gets(str2);
str = strlong(str1, str2);
printf("\nLonger string: %s \n", str);
getchar();
return 0;
}
  编写一个函数,它会生成 10 个随机数,并使用表示指针的数组名(即第一 个数组元素的地址)来返回它们。
#include <stdio.h>
int *func(){
static int n = 100;
return &n;
}
int main(){
int *p = func();
int n;
printf("okoook~~");
printf("okoook~~");
printf("okoook~~");
n = *p;
printf("\nvalue = %d\n", n);
getchar();
return 0;
}
函数指针
 

#include <stdio.h>
int max(int a, int b){
return a>b ? a : b;
}
int main(){
int x, y, maxVal;
int (*pmax)(int x, int y) = max;
printf("Input two numbers:");
scanf("%d %d", &x, &y);
maxVal = (*pmax)(x, y);
printf("Max value: %d pmax=%p pmax本身的地址=%p\n", maxVal, pmax, &pmax);
getchar();
getchar();
return 0;
}
回调函数
 使用回调函数的方式,给一个整型数组int arr[10] 赋10个随机数
#include <stdlib.h>
#include <stdio.h>
void initArray(int *array, int arraySize, int (*f)(void)) {
int i ;
for ( i=0; i<arraySize; i++) {
array[i] = f();
}
}
int getNextRandomValue(void) {
return rand();
}
int main(void) {
int myarray[10],i;
initArray(myarray, 10, getNextRandomValue);
for(i = 0; i < 10; i++) {
printf("%d ", myarray[i]);
}
printf("\n");
getchar();
return 0;
}
空指针

#include <stdio.h>
void main() {
int *p = NULL;
int num = 34;
p = #
printf("*p=%d", *p);
getchar();
}
|