C-də Simli Göstərici


SimBaxılıb 666

Sistem dizaynı ilə bağlı müsahibə sualları o qədər açıq ola bilər ki, düzgün hazırlaşmağı bilmək çox çətindir. İndi satın aldıqdan sonra Amazon, Microsoft və Adobe-nin dizayn dövrlərini sındıra bilirəm Bu kitabı. Gündəlik bir yenidən nəzərdən keçirin dizayn sualı və söz verirəm ki, dizayn dövrünü sındıra bilərsiniz.

C-də String Pointer – Simvol məlumat tipləri yalnız 1 bayt simvol saxlamaq üçün istifadə olunur. Dəyişəndə ​​yalnız bir simvol tutur. Lakin proqramlarda istifadə ediləcək sözlər/cümlələr olduğu üçün bu xarakter məlumat tipindən daha çox xüsusiyyətə sahib olmalıyıq. Belə hallarda biz söz/sətir dəyərlərini saxlamaq üçün simvollar massivi yaradırıq və sətirin sonunu göstərmək üçün '\0' null simvolu əlavə edirik.

Fərz edək ki, proqramdakı dəyişəndə ​​saxlanacaq bir 'C Pointer simli var. Sonra bu dəyəri tutmaq üçün bir sıra xarakter yaradırıq. Buna görə bunu aşağıdakı şəkildə elan edirik və başlatırıq:

char chrString [] = {‘C’,’ ’,’P ’,’o ’,’i ’,’n ’,’t ’,’e ’,’r ’,’s’,’\0’};

OR
char chrString [] = “C Pointers”; // Double quotes are used instead of above representation

Yuxarıdakı bəyannamə və diaqramdan bunun da artıq müzakirə etdiyimiz digər bir sıra kimi bir sıra olduğunu müşahidə edə bilərik. Beləliklə, digər sıra göstəriciləri kimi bu xarakter massivlərinə də işarə edə bilərik. Göstəricilər simvol massivi və ya simlər üçün istifadə edildikdə, simli göstəricilər adlanır. Hər hansı digər sıra göstəricilərinə bənzər işləyir. Sətir göstəricilərini artırdığımızda və ya azaldığımızda ünvanı 1 bayta artırır və ya azaldır.

Bir proqramdan istifadə edərək simli göstəricini anlamağa çalışaq. Aşağıdakı proqramı nəzərdən keçirin. chrString və chrNewStr iki sətirdir. Birinci sətir 'C Pointers' üçün başlanğıc edilir, burada ikinci sətir yoxdur. String Pointers chrPtr və chrNewPtr müvafiq olaraq chrString və chrNewString üçün başlanğıcdır. Başlanğıcda chrPtr simli chrStringin ilk simvoluna işarə edəcəkdir. İçində döngə zamanı aşağıda chrPtr ('C Pointers') tərəfindən göstərilən hər bir simvolun NULL ilə müqayisə edildiyini və döngənin sona qədər icra edildiyini - '' 0 '' sıfırına qədər qarşılaşdığını görə bilərik. Döngünün içərisində göstəricinin hər bir simvolu göstərilir və növbəti işarəyə işarə etmək üçün göstərici 1 artırılır. Növbəti addımda hər bir simvol başqa bir göstəriciyə kopyalanır chrNewPtr. Eyni zamanda, hər iki göstərici növbəti xarakteri göstərmək üçün artırılır. Burada artım operatorunun '*' ilə yanaşı istifadə edildiyini görə bilərik; * chrPtr ++. Tərtibçi onu * chrPtr və chrPtr ++ olaraq böləcək; əvvəlcə cari ünvanla göstərilən dəyəri chrPtr-də təyin edəcək və sonra növbəti ünvana yönəldiləcək qədər artırılacaq deməkdir. Beləliklə, xarakteri xaraktercə başqa bir göstəriciyə kopyalayır və yazılmır, eyni dəyər kopyalanmır. ChrPtr sona çatdıqda, '\ 0' ilə qarşılaşır. Buna görə while döngüsü '\ 0' yeni göstəriciyə kopyalanmadan sona çatır. Buna görə sonda '\ 0' təyin edərək yeni simli açıq şəkildə ləğv edirik. Beləliklə, yeni simli chrNewStr dəyərini yazdırdığımızda, chrNewPtr göstəricisinə kopyalanan dəyəri alır. Buna görə kopyalanan dəyəri göstərir.

#include <stdio.h>
int main()
{
	char chrString[] = "C Pointers";
	char chrNewStr[20];
	char   *chrPtr;
	char   *chrNewPtr;

	chrPtr = chrString; // Pointer is assigned to point at the beginning of character array chrString
	chrNewPtr = chrNewStr; //Assign pointer chrNewPtr to point to string chrNewStr

	printf("String value pointed by pointer is :");
		while (*chrPtr!= '\0') {
			printf("%c", *chrPtr); // displays the value pointed by pointer one by one
			*chrNewPtr++ = *chrPtr++; // copies character by character to new pointer
		}
	*chrNewPtr = '\0';
	printf("New copied string pointer is :");
		puts(chrNewStr);
	return 0;
}

arayış

Crack Sistemi Dizayn Müsahibələri
Translate »
1