您的位置:首页 > 编程语言 > C语言/C++

C语言之指针学习笔记

2017-08-25 08:52 337 查看
指针也是一种变量,占有内存空间,用来保存内存地址。

在指针声明时,*号代表所声明的变量为指针。

在指针使用时,*号表示操作指针所指向的内存空间的值。

*p相当于通过地址(p变量的值)找到一块内存,然后操作内存。

*p放在等号的左边赋值(给内存赋值)

*p放在等号的右边取值(从内存获取值)

指针变量和它所指向的内存块是两个不同的概念。

指针是一种数据类型,是指它指向的内存空间的数据类型。

去除字符串前后空格的两种代码实现方法:

int trimSpace(char *str, char *newstr)
{
char *p = str;
int ncount = 0;
if(str == NULL || newstr == NULL)
{
printf("func trimSpace()\n");
return -1;
}
int i, j;
i = 0;
j = strlen(p) - 1;

while(isspace(p[i]) && p[i] != '\0')
{
i++;
}

while(isspace(p[j]) && p[j] != '\0')
{
j--;
}
ncount = j - i + 1;
strncpy(newstr, str + i, ncount);
newstr[ncount] = '\0';

//*pCount = ncount;
return 0;
}

int trimSpace02(char *str)
{
char *p = str;
int ncount = 0;
if(str == NULL)
{
printf("func trimSpace()\n");
return -1;
}
int i, j;
i = 0;
j = strlen(p) - 1;

while(isspace(p[i]) && p[i] != '\0')
{
i++;
}

while(isspace(p[j]) && p[j] != '\0')
{
j--;
}
ncount = j - i + 1;
strncpy(str, str + i, ncount);
str[ncount] = '\0';

//*pCount = ncount;
return 0;
}

二级指针做输入的第一种数据模型:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void printMyArray01(char **myArray, int num)
{
int i = 0;
if(myArray == NULL)
{
return;
}
for(i = 0; i < num; i++)
{
//printf("%s\n", myArray[i]);
printf("%s\n", *(myArray + i));
}
}

void sortMyArray01(char **myArray, int num)
{
int i = 0, j = 0;
char *tmp = NULL;
for(i = 0; i < num; i++)
{
for(j = i; j < num; j++)
{
if(strcmp(myArray[i], myArray[j]) > 0)
{
tmp = myArray[i];
myArray[i] = myArray[j];
myArray[j] = tmp;
}
}
}
}

void main()
{
int num = 0;
char *myArray[] = {"aaaaaa", "ccccc", "bbbbbb", "11111"};

num = sizeof(myArray)/sizeof(myArray[0]);

printf("排序之前:\n");
printMyArray01(myArray, num);

sortMyArray01(myArray, num);

printf("排序之后:\n");
printMyArray01(myArray, num);
printf("hello...\n");
return;
}

二级指针做输入的第二种内存模型:

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

void printArray(char myArray[10][30], int num)
{
int i = 0;
for(i = 0; i < num; i++)
{
//printf("%s\n", myArray[i]);
printf("%s\n", *(myArray+i));
}
}

void sortMyArray(char myArray[10][30], int num)
{
int i = 0, j = 0;
char tmpBuf[30];
for(i = 0; i < num; i++)
{
for(j = i+1; j < num; j++)
{
if(strcmp(myArray[i], myArray[j])>0)
{
strcpy(tmpBuf, myArray[i]);
strcpy(myArray[i], myArray[j]);
stpcpy(myArray[j], tmpBuf);
}
}
}
}

void main()
{
int num = 4;
char myBuf[30];
char myArray[10][30] = {"aaaaaa", "ccccc", "bbbbbbbb", "111111111111111"};

{
int len1 = sizeof(myArray);
int len2 = sizeof(myArray[0]);
int size = len1/len2;
printf("len1:%d, len2:%d, size:%d\n", len1, len2, size);

}
printf("排序之前:\n");
printArray(myArray, num);

sortMyArray(myArray, num);

printf("排序之后:\n");
printArray(myArray, num);
printf("hello...\n");
return;
}二级指针做输入的第三种内存模型:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char **getMem(int num)
{
int i = 0;
char **p2 = NULL;
p2 = (char **)malloc(sizeof(char *) * num);
if(p2 == NULL)
{
return NULL;
}
for(i=0; i<num; i++)
{
p2[i] = (char *)malloc(sizeof(char)*100);
sprintf(p2[i], "%d%d%d", i+1, i+1, i+1);
}
return p2;
}

void printArray(char **myArray, int num)
{
int i = 0;
for(i=0; i<num; i++)
{
printf("%s\n", myArray[i]);
printf("%s\n", *(myArray+i));
}
}

void main()
{
int i = 0, j = 0;
char **p2 = NULL;
char *tmp = NULL;
char tmpbuf[100];
int num = 5;
p2 = getMem(num);

for(i=0; i<num; i++)
{
p2[i] = (char *)malloc(sizeof(char)*100);
sprintf(p2[i], "%d%d%d", i+1, i+1, i+1);
}

printf("排序之前:\n");
for(i=0; i<num; i++)
{
printf("%s\n", p2[i]);
}
/*
for(i=0; i<num; i++)
{
for(j=i+1; j<num; j++)
{
if(strcmp(p2[i], p2[j])<0)
{
tmp = p2[i];
p2[i] = p2[j];
p2[j] = tmp;
}
}
}
*/
for(i=0; i<num; i++)
{
for(j=i+1; j<num; j++)
{
if(strcmp(p2[i], p2[j])>0)
{
strcpy(tmpbuf, p2[i]);
strcpy(p2[i], p2[j]);
strcpy(p2[j], tmpbuf);
tmp = p2[i];
p2[i] = p2[j];
p2[j] = tmp;
}
}
}
printf("排序之后:\n");
for(i=0; i<num; i++)
{
printf("%s\n", p2[i]);
}

for(i=0; i<num; i++)
{
if(p2[i] != NULL)
{
free(p2[i]);
p2[i] = NULL;
}
}

if(p2 != NULL)
{
free(p2);
p2 = NULL;
}
printf("hello...\n");
return;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: